# 流程相关数据使用场景
# 1 描述
- 流程相关数据(BPS Relevant Data)主要指与业务流程相关的数据。例如低开中的表单数据默认会存在流程相关数据中。
- 流程引擎将每一个流程实例有且仅有那份流程相关数据存放在相关数据区中,该流程下的所有活动实例共享该区域,该区域中放置了流程引擎的内部数据即内部变量,也可以放置用户自定义的数据。这些数据可以被流程引擎使用,作为流程实例推进和各活动实例状态变迁的依据;也可以被该流程实例所调用的应用程序访问或修改(内部变量是只读的不能修改)。
- 相关数据区中的数据即流程相关数据,仅在一个流程实例的运行范围内有效,并且该数据也只在所属流程实例内可见。
# 2 相关数据xpath获取
相关数据xpath即为获取对应数据的key值,流程绑定的表单实体在发起流程后会存入相关数据,key为__bfp_entity。
如果流程使用多表单时,子表单存在相关数据中的key将是__bfp_entity_{entityName},其中entityName为实体名称。例:子表单绑定实体名称为:zhaoel.demo1.llStudent,则存在相关数据的key就是__bfp_entity_zhaoel.demo1.llStudent。
具体相关数据xpath可根据发起流程后在实例管理中查看相关数据方式查看对应实体属性xpath,如下图。
特殊注意
流程属性中设置自定义相关数据时未设置初始值时,该相关数据key不会存入相关数据区中。
# 3 相关数据值修改
在流程发起后可针对流程相关数据做动态修改值,以下可通过两种方式修改相应的值。
- 通过afc实例管理页面中相关数据管理做对应key值数据修改。修改路径为要修改数据的xpath。
- 通过调用bps相关数据管理接口来直接操作相关数据
# 4 内置变量介绍
在流程的相关数据中加入了一些与业务流程当前运行时环境相关的实例对象作为内部变量,包括:当前流程实例、当前活动实例、当前工作项、父流程相关数据上下文。这些内置变量可以方便的取到当前环境中的工作流实例的数据,可以被当前实例所调用的应用程序访问,但不允许修改。
# 4.1 thisProcessInst
- 定义:当前流程实例,对应的数据实体值为"com.eos.workflow.data.WFProcessInst"类型的JavaBean实体或者DataObject实体,具体的值类型由调用的形参决定。
- 作用域:整个流程层面均可使用,如:简单表达式、触发事件、回退、规则逻辑、相关数据获取等。
- 使用规则:可以直接使用thisProcessInst变量名(表示流程实例对象);也可以取流程实例对象下的属性thisProcessInst/processInstID(表示流程实例ID)。不允许回填相关数据。
# 4.2 thisActivityInst
- 定义:当前活动实例,对应的数据实体为"com.eos.workflow.data.WFActivityInst"类型的JavaBean实体或者DataObject实体,具体的值类型由调用的形参决定。
- 作用域:在活动层面可以使用,如:自动活动、活动上触发事件、规则逻辑、回退、相关数据获取等。如果在不正确的作用域中使用则返回null值。
- 使用规则:可以直接使用thisActivityInst变量名(表示活动实例对象);也可以取流程实例对象下的属性thisActivityInst/activityInstID(表示活动实例ID)。不允许回填相关数据。
# 4.3 thisWorkItem
- 定义:当前工作项,对应的数据实体为"com.eos.workflow.data.WFWorkItem"类型的JavaBean实体或者DataObject实体,具体的值类型由调用的形参决定。
- 作用域:在触发时机为工作项类型的触发事件中可以使用,如:完成工作项等。如果在不正确的作用域中使用则返回null值。
- 使用规则:可以直接使用thisWorkItem变量名(表示活动实例对象);也可以取流程实例对象下的属性thisWorkItem/workItemID(表示活动实例ID)。不允许回填相关数据。
# 4.4 parentContext
- 定义:父流程的相关数据上下文,无对应的实体对象,是一个虚拟的变量可以通过这个变量来获取父流程的流程实例、活动实例或者是再向上获取父流程相关数据。
- 作用域:只有当业务流程被当作子流程调用的时候parentContext可以使用,使用范围同thisProcessInst;如果业务流程没有当做子流程被调用,则没有父流程所以会返回null值。
- 使用规则:不可以直接使用。只可以通过parentContext来获取父流程的一些内部变量,"parentContext/thisProcessInst"表示父流程的当前流程实例对象实体;"parentContext/thisActivityInst/activityInstID"表示父流程的当前活动实例的活动实例ID;"parentContext/parentContext/thisProcessInst"表示父流程的流程实例对象实体(注:当前流程的父流程也被当作子流程调用)。不允许回填相关数据。
# 4.5 内置变量使用示例
以下示例均以流程实例为例,活动实例、工作项相关属性获取方式类似。即通过thisProcessInst可获取流程实例对象,/属性名即可获取对应对象下的属性值。
- 给一个需要long类型参数的方法中传入流程实例ID
- 给一个需要流程实例对象的方法中传入流程实例对象本身
# 5 相关数据使用场景
# 5.1 相关数据做为环节参与者
相关数据可作为流程环节参与者,并通过设置相关数据值来决定下一环节参与者信息 ,参与者相关数据值类型可为WFParticipant、List、String。可通过调用相关数据管理相关接口来设置相关数据中某个key的值。
以下步骤以String类型相关数据为例
流程属性设置相关数据(给默认值__participant:1261,稀饭粥1,emp) 其中1261为参与者id,稀饭粥1为参与者名称,emp为参与者类型,该三个值来决定参与者信息并且位置顺序固定。
人工活动2设置参与者为相关数据并设置值为相关数据key,即人工活动2参与者来源于相关数据。
发起流程后可通过调用spi接口设置流程相关数据key为participant的值,默认则为流程属性中设置的值,如下图在流程实例管理中也可通过相关数据管理来设置对应值。将默认值修改为__participant:1261,稀饭粥1,emp|1182,www,emp。String类型参与者相关数据当参与者为多个时可通过|分割。如下图修改值。
人工活动1审批后创建人工活动2活动实例,活动参与者从相关数据解析到。如下图
相关数据参与者也可通过流程绑定的表单组件来获取,如下步骤是通过绑定表单,通过表单人员选择组件中打开流程参与者并复制表单数据存储在相关数据中的xpath来实现参与者设置。
表单开发选人组件,打开流程参与者开关后复制其xpath
流程开发时环节参与者选择相关数据,值为表单组件复制的xpath
# 5.2 多工作项迭代变量
流程环节设置多工作项迭代变量时,被迭代变量值为相关数据的XPath,要求所表示的相关数据对象为数组或java.util.List对象。
可在流程属性中设置相关数据,发起流程后可根据相关数据管理相关接口设置该值,从而实现迭代该值来创建多工作项。
人工活动2多工作项环节设置被迭代变量为相关数据xpath
发起流程后通过调用设置相关数据接口来设置多工作项被迭代变量值
以下图示中调用bfp设置相关数据接口,实际也可直接调用bps设置相关数据对外接口
环节审批到人工2时根据设置的迭代变量值创建对应个数工作项
此时可以选择表单组件中某个组件作为被迭代变量,以下示例还是以选人组件中流程参与者xpath为例。
流程环节选择开启多工作项并且迭代选人组件的相关数据xpath,被迭代变量自定义,此处示例定义为p,在参与者处有用到。
多工作项环节的参与者绑定定义的迭代变量,这样可以实现根据表单选择组件选择的参与者个数来给每个参与者创建对应的工作项。
# 5.3 相关数据做为分支条件
流程分支条件设置时可选择相关数据类型比较,值为相关数据的XPath。
可在流程属性中设置相关数据,发起流程后可根据相关数据管理相关接口设置该值来决定流程分支走向。
分支连线设置条件为相关数据,人工活动2方向连线设置如下图条件,人工活动3则为默认连线。
发起流程后修改相关数据值,下图为在流程实例中进行修改,也可通过调用接口修改相关数据
人工活动1提交任务后走分支判断,条件符合启动人工活动2
# 5.4 相关数据做为超时时间设置
流程环节中时间限制设置时可选择相关数据作为工作日历、时间限制和超时提醒的值,值为相关数据的XPath,可根据接口调用设置对应值来决定超时时间。以下以超时时间限制值为例
流程属性中添加相关数据,该key值作为时间限制中相关数据xpath
人工活动2中设置时间限制策略值为相关数据
发起流程并设置相关数据timeout值,下图根据实例管理中设置相关数据,也可通过调用接口方式。注意超时时间相关数据值为日时分,中间.隔开方式,即1.2.3为1天2小时3分钟。
提交人工活动1,创建人工活动2工作项并解析超时时间。
# 5.5 相关数据做为多子流程被迭代元素
流程环节中存在子流程活动实例时,子流程活动多子流程策略开启多子流程设置可将相关数据作为被迭代元素。被迭代元素值为相关数据的XPath,要求所表示的相关数据对象为数组或java.util.List对象。
可在流程属性中设置相关数据,发起流程后可根据相关数据管理相关接口设置该值,从而实现迭代该值来创建多子流程。
子流程活动实例中多子流程策略被迭代元素设置值为相关数据xpath
发起流程后通过调用设置相关数据接口来设置多子流程被迭代元素值
以下图示中调用bfp设置相关数据接口,实际也可直接调用bps设置相关数据对外接口
环节审批到子流程活动实例时根据设置的迭代元素值创建对应个数子流程实例(上图设置的subProcessIterate数组size为2,所以启动子流程实例为2个)
# 5.6 子流程流程参数作为子流程相关数据
流程环节中存在子流程活动实例时,子流程活动设置的流程参数可做为子流程实例中相关数据。子流程流程参数值来源于父流程传入。
创建子流程并设置流程参数。
父流程中设置子流程环节的流程绑定并设置流程参数值,下图示例中以直接赋值常量333为例。
发起流程后启动子流程环节,流程参数值将作为相关数据存入子流程实例中。
# 5.7 引擎触发事件使用相关数据做参数
在流程环节中使用引擎事件调用服务时可将流程相关数据做为参数传入到调用的服务中去。
ide创建流程事件,并设置参数入参信息,如下图设置事件入参为activityName。
流程属性设置相关数据
流程环节设置引擎事件并选择1创建的流程事件,设置参数值为相关数据xpath。即__activityName
启动流程并设置相关数据值为123
启动人工活动2后触发引擎事件调用eos服务,调试服务断点查看入参传入的结果。
# 5.8 自动活动赋值修改相关数据
流程环节自动活动中可通过赋值操作修改相关数据中某个key的值。
流程属性设置相关数据,并配置默认值为123
设置自动活动中赋值操作选择相关数据的值修改为456。
发起流程并查看相关数据值是否被修改成功
# 5.9 参与者规则中使用相关数据
在流程属性中可自定义参与者规则实现参与者信息根据条件动态配置。参与者规则中可选择业务资源来控制获取相关数据中值,进行条件判断。
流程属性设置相关数据和业务变量,业务变量为相关数据的一个抽象。相关数据值设置为123。
添加参与者规则,设置条件为业务变量相关数据值判断。
人工环节设置参与者信息为参与者规则。
发起流程启动该环节后,判断相关数据和123值复合则参与者信息为参与者规则中配置的参与者。